#!/bin/bash
#导入离线镜像包集合，并分析镜像包名称，匹配更新K8S deployment镜像版本
# load_image_update_deploymentimage.sh images.tar.gz

namespaces_name=spectrum-analysis-system-shenzhen

docker load -i $1 |grep "Loaded image" |while read link_one
do 

  images_name=$(echo $link_one|awk '{print $3}')
  docker push $images_name 

  # 获取所有deployments名称
  app_name=($(kubectl get deployments -n $namespaces_name -o=jsonpath='{.items[*].metadata.name}'))
  found=0
  
  # 定义一个数组，准备添加所有匹配名称
  hit_name_list=() 

  for element in "${app_name[@]}"
    do
      if [[ "$images_name" == *"xxxxxxxxxxxxxx"* ]]; then  # 需要特别处理的名称
        kubectl set image deployment front-sumz-auth-system front-sumz-auth-system=$images_name -n $namespaces_name
        echo "[---info---]匹配front-sumz-qc-sys:更新镜像$images_name"
        found=1
        #break
      elif [[ "$images_name" == *"$element"* ]]; then
        hit_name_list+=($element)
        echo "[---info---]匹配$element:更新镜像$images_name"
        found=1
        #break
      fi
  done

  # 初始化变量来存储最长字符串的长度和对应的字符串  
  longest_string=""
  longest_length=0

  # 循环遍历数组中每个字符串  
  for str in "${hit_name_list[@]}"; do  
      # 获取当前字符串的长度  
      length=${#str}  

      # 比较并更新最长字符串和最长长度  
      if (( length > longest_length )); then  
          longest_length=$length  
          longest_string=$str
      fi  
  done

  # 根据判断结果输出相应的信息
  if [[ $found -ne 1 ]]; then
      echo "[---ERROR---] $images_name 未在匹配到名称，无法处理"
  else
  # 输出结果 
  echo "[---info---]精度最高的deployment是: '$longest_string', 进行更新"
  kubectl set image deployment $longest_string $longest_string=$images_name -n $namespaces_name
  fi

done
